#pragma once
#include "SplitTool.h"
#include "WebPage.h"
#include "Configuration.h"
#include <unordered_map>

//获取网页搜索结果类
class WebPageQuery{
public:
    WebPageQuery(Configuration *config, SplitTool &splitTool);
    ~WebPageQuery();
    string doQuery(const string &sentence); //执行查询的主函数
private:
    void loadLibary(); //从磁盘中读取网页偏移库和网页倒排索引库
    vector<double> getQueryWordsWeightVector(vector<string> &queryWords); //计算基准向量
    //根据用户查询分词并去停用词后的结果，生成所有匹配网页的n维向量cos值
    bool executeQuery(const vector<string> &queryWords, vector<pair<int, vector<double>>> &resultVec);
    string createJson(vector<int> &docidVec); //生成查询结果并封装为json格式再作为string返回
private:
    /* unordered_map<int, WebPage> _pageLib; //网页库，不应该全部读取到内存中 */
    unordered_map<int, pair<int, int>> _offsetLib; //网页偏移库
    unordered_map<string, set<pair<int, double>>> _invertIndexTable; //网页倒排索引库
    Configuration *_config;
    SplitTool &_splitTool;
};

